/* Controlador Login: Contiene todas las funciones para la realizacion del login
 Creado por Carlos Pastelin Morales 
 29/12/2014 */
package Controlador;

import Vistas.Interface;
import javax.swing.*;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyVetoException;
import java.text.SimpleDateFormat;
import Vistas.inicio;
import Controlador.Conexion;
import Modelo.INFONEGOCIO;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import Modelo.Usuarios;
import Vistas.AgregarInfoNegocio;
import java.sql.ResultSet;

public class SrvLogin extends JFrame {
/*Inicializamos las variables a utilizar*/
    int ID = -1;
    private String nom = "", password = "", id = "", nivel = "";
    private String nombre = "";
    private String ap = "";
    private String am = "";
    public String nomempresa = "", direccion = "", tel = "", rfc = "";
    private ResultSet rs;
    INFONEGOCIO modeloinfo = new INFONEGOCIO();//29/12/2014 C.P.M  Inicializamos el modelo de info
    Interface inter = new Interface();//29/12/2014 C.P.M Inicializamos el modelo de interface
    Usuarios modelo = new Usuarios();//29/12/2014 C.P.M Inicializamos el modelo de usuario
    private inicio vista;//29/12/2014 C.P.M Iniciamos una variable de tipo inicio para obtener la vista

    public SrvLogin(inicio view) {//29/12/2014 C.P.M Constructo el cual recibe como argumento la vista de inicio para suc ontrol
        this.vista = view;//29/12/2014 C.P.M Le asignamos la vista 
    }

    public void LoginUsuario() {
        /* Funcion LoginUsuario: Realiza el logeo de el usuario
         Creado por Carlos Pastelin Morales 
         29/12/2014 */
        if (vista.txtUser.getText().equals("") || vista.txtPass.getText().equals("")) {//29/12/2014 C.P.M Validamos si esta llenas las cajas
            JOptionPane.showMessageDialog(rootPane, "Faltan campos por llenar");//29/12/2014 C.P.M si falta datos notificamos
            vista.txtUser.requestFocus();//29/12/2014 C.P.M Pasamos el foco al primer componente
        } else {
            try {
                Usuarios consulta = new Usuarios();//29/12/2014 C.P.M Inicializamos el modelo
                consulta.setUsuario(vista.txtUser.getText());//29/12/2014 C.P.M Enviamos el contenido de usuario
                rs = consulta.Login();//29/12/2014 C.P.M Capturamos al respuesta del modelo
                while (rs.next()) {//29/12/2014 C.P.M se obtienen los datos de la consulta
                    id = rs.getString(1);
                    nombre = rs.getString(2);
                    ap = rs.getString(3);
                    am = rs.getString(4);
                    nom = rs.getString(5);
                    password = rs.getString(6);
                    nivel = rs.getString(7);
                }
                if (id.equals("")) {//29/12/2014 C.P.M Si viene vacio notificamos
                    JOptionPane.showMessageDialog(rootPane, "Usuario No Encontrado");
                    vista.txtUser.setText("");
                    vista.txtPass.setText("");
                    vista.txtUser.requestFocus();
                } else {
                    ID = Integer.parseInt(id);//29/12/2014 C.P.M Obtenemos el id del usuario
                    int N = Integer.parseInt(nivel);//29/12/2014 C.P.M  obtenemos el nivel
                    if (nom.equals(vista.txtUser.getText())) {//29/12/2014 C.P.M  camparamos el usuario 
                        if (vista.txtPass.getText().equals(password)) {//29/12/2014 C.P.M comparamos el pass
                            //29/12/2014 C.P.M  Se compara si el estatus es igual a TRUE
                            if (N == 0) {//29/12/2014 C.P.M  Si si nivel es administrador 
                                rs = modeloinfo.Obteninfo();//29/12/2014 C.P.M Obtenemos la informacion de negocio
                                while (rs.next()) {//29/12/2014 C.P.M obtenemos los datos de la consulta
                                    nomempresa = rs.getString(1);
                                    direccion = rs.getString(2);
                                    tel = rs.getString(3);
                                    rfc = rs.getString(4);
                                }
                                if (nomempresa.equals("")) {//29/12/2014 C.P.M Si no tiene datos es que no se a configurado el sistema
                                    JOptionPane.showMessageDialog(rootPane, "Es nesesario configurar la información de negocio");//29/12/2014 C.P.M nitificamos
                                    AgregarInfoNegocio infoventana = new AgregarInfoNegocio(vista, true);//29/12/2014 C.P.M instanciamos en modo modal
                                    infoventana.setLlamado("login");//29/12/2014 C.P.M el modulo se utiliza en dos partes por lo tanto le mandamos el llamado
                                    infoventana.setLocationRelativeTo(vista);//29/12/2014 C.P.M lo alineamos a la vista
                                    infoventana.setVisible(true);//29/12/2014 C.P.M  acemos visible la ventana de configuracion
                                    rs = modeloinfo.Obteninfo();//29/12/2014 C.P.M y volvemos a pedir la informacion de negocio
                                    while (rs.next()) {
                                        nomempresa = rs.getString(1);
                                        direccion = rs.getString(2);
                                        tel = rs.getString(3);
                                        rfc = rs.getString(4);
                                    }
                                    inter.infonegocio(nomempresa, direccion, tel, rfc);//29/12/2014 C.P.M Mandamos los datos a la funcion para ver visibles
                                    inter.setId(id);//29/12/2014 C.P.M  Mandamos el id
                                    inter.setC();//29/12/2014 C.P.M  y ejecutamos para obtener el nivel dentro de la interfas
                                    inter.IDusuario = ID;//29/12/2014 C.P.M Le asignamos a el campo el id 
                                    JOptionPane.showMessageDialog(rootPane, "Bienvenido " + nombre + " " + ap + " " + am + " \nHas entrado al sistema como: Administrador");
                                    inter.setLocationRelativeTo(null);//29/12/2014 C.P.M Alineamos la ventana a windows
                                    inter.setVisible(true);//29/12/2014 C.P.M Acemos visible la ventana
                                    vista.dispose();//29/12/2014 C.P.M y eliminamos la forma de inicio
                                } else {//29/12/2014 C.P.M  Esto se eliminara 
                                    inter.infonegocio(nomempresa, direccion, tel, rfc);
                                    inter.setId(id);
                                    inter.setC();
                                    inter.IDusuario = ID;
                                    JOptionPane.showMessageDialog(rootPane, "Bienvenido " + nombre + " " + ap + " " + am + " \nHas entrado al sistema como: Administrador");
                                    inter.setLocationRelativeTo(null);
                                    inter.setVisible(true);
                                    vista.dispose();
                                }
                            }
                            if (N == 1) {//29/12/2014 C.P.M Se iniciara con vendedor
                                rs = modeloinfo.Obteninfo();//29/12/2014 C.P.M  obtenemos la informacion
                                while (rs.next()) {
                                    nomempresa = rs.getString(1);
                                    direccion = rs.getString(2);
                                    tel = rs.getString(3);
                                    rfc = rs.getString(4);
                                }
                                if (nomempresa.equals("")) {//29/12/2014 C.P.M si viene vacia 
                                    JOptionPane.showMessageDialog(rootPane, "Es nesesario que el administrador configure el sistema");//29/12/2014 C.P.M notificamos                           
                                    vista.txtUser.setText("");//29/12/2014 C.P.M limpiamos la caja de texto
                                    vista.txtPass.setText("");//29/12/2014 C.P.M  limpiamos la caja de texto
                                    vista.txtUser.requestFocus();//29/12/2014 C.P.M y cambiamos el foco
                                } else {
                                    inter.infonegocio(nomempresa, direccion, tel, rfc);//29/12/2014 C.P.M de lo contrario mandamos los datos a la vista
                                    inter.setId(id);//29/12/2014 C.P.M mandamos el id
                                    inter.setC();//29/12/2014 C.P.M mandamos el nivel
                                    inter.IDusuario = ID;//29/12/2014 C.P.M le mandamos a la caja el id
                                    JOptionPane.showMessageDialog(rootPane, "Bienvenido " + nombre + " " + ap + " " + am + " \nHas entrado al sistema como: Vendedor");
                                    inter.jTabbedPane1.removeTabAt(3);//29/12/2014 C.P.M ocultamos los paneles que no se debe mostrar
                                    inter.jTabbedPane1.removeTabAt(2);
                                    inter.jTabbedPane1.removeTabAt(0);
                                    inter.setLocationRelativeTo(null);//29/12/2014 C.P.M alineamos la ventana
                                    inter.setVisible(true);//29/12/2014 C.P.M  y acemos visible la ventana
                                    vista.dispose();//29/12/2014 C.P.M cerramos la de logeo
                                }
                            }
                            if (N == 2) {//29/12/2014 C.P.M es de tipo vendedor
                                rs = modeloinfo.Obteninfo();//29/12/2014 C.P.M obtenemos la informacion de negocio
                                while (rs.next()) {//29/12/2014 C.P.M obtenemos los datos
                                    nomempresa = rs.getString(1);
                                    direccion = rs.getString(2);
                                    tel = rs.getString(3);
                                    rfc = rs.getString(4);
                                }
                                if (nomempresa.equals("")) {//29/12/2014 C.P.M si no tiene notificamos a el usuario
                                    JOptionPane.showMessageDialog(rootPane, "Es nesesario que el administrador configure el sistema");
                                    vista.txtUser.setText("");//29/12/2014 C.P.M limpiamos la caja de texto
                                    vista.txtPass.setText("");//29/12/2014 C.P.M  limpiamos la caja de texto
                                    vista.txtUser.requestFocus();//29/12/2014 C.P.M y cambiamos el foco
                                } else {
                                    inter.infonegocio(nomempresa, direccion, tel, rfc);//29/12/2014 C.P.M mandamos la informacion a la vista
                                    inter.setId(id);//29/12/2014 C.P.M enviamos el idi 
                                    inter.setC();//29/12/2014 C.P.M enviamos el nivel
                                    inter.IDusuario = ID;//29/12/2014 C.P.M enviamos el id de usuario a el campo
                                    JOptionPane.showMessageDialog(rootPane, "Bienvenido " + nombre + " " + ap + " " + am + " \nHas entrado al sistema como: Capturista");
                                    inter.setLocationRelativeTo(null);//29/12/2014 C.P.M alineamos la ventana
                                    inter.jTabbedPane1.removeTabAt(3);//29/12/2014 C.P.M removemos las ventanas a las cuales no tiene acceso
                                    inter.jTabbedPane1.removeTabAt(2);
                                    inter.jTabbedPane1.removeTabAt(1);
                                    inter.setVisible(true);//29/12/2014 C.P.M acemos visible la ventana
                                    vista.dispose();//29/12/2014 C.P.M cerramos la ventana de logeo
                                }
                            }
                        } else {//29/12/2014 C.P.M de lo contrario el pass es incorrecto y lo notificamos
                            JOptionPane.showMessageDialog(rootPane, "Contraseña Incorrecta");
                            vista.txtPass.setText("");//29/12/2014 C.P.M limpiamos el campo de pass
                            vista.txtPass.requestFocus();//29/12/2014 C.P.M y le pasamos el componente
                        }
                    } else {//29/12/2014 C.P.M de lo contrario el usuario y el pass esta mal y le notificamos al usuario
                        JOptionPane.showMessageDialog(rootPane, "Usuario o Contraseña Incorrecta");
                        vista.txtUser.setText("");//29/12/2014 C.P.M limpiamos los campos
                        vista.txtPass.setText("");
                        vista.txtUser.requestFocus();//29/12/2014 C.P.M y le pasamos el foco al componente
                    }
                }
            } catch (Exception e) {//29/12/2014 C.P.M en caso de un error es nesesario notificarlo para que se pongan en contacto
                JOptionPane.showMessageDialog(rootPane, "Error al intentar logearse, contactar a soporte");//29/12/2014 C.P.M Ocure error notificamos       
            }
        }
    }
}
